/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.unipar.cursoweb.controle;

import br.com.unipar.cursoweb.modelo.Cidade;
import br.com.unipar.cursoweb.modelo.Estado;
import br.com.unipar.cursoweb.modelo.Funcionario;
import br.com.unipar.cursoweb.service.CidadeService;
import br.com.unipar.cursoweb.service.FuncionarioService;
import br.com.unipar.cursoweb.util.FacesUtils;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.inject.Named;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Thiago
 */
@Controller
@Scope("request")
@Named("funcionarioBean")
public class FuncionarioBean {

    private final FuncionarioService funcionarioService;
    private final CidadeService cidadeService;
    private final FacesUtils facesUtils;
    private Funcionario funcionario = new Funcionario();
    private List<Funcionario> funcionarios;
    private Estado estado;
    private List<Estado> estados;
    private List<Cidade> cidades;
    private String nomeConsulta;
    private String usuario;
    private String senha;

    @Autowired
    private FuncionarioBean(FuncionarioService funcionarioService, CidadeService cidadeService, FacesUtils facesUtils) {
        this.funcionarioService = funcionarioService;
        this.cidadeService = cidadeService;
        this.facesUtils = facesUtils;
    }

    @PostConstruct
    private void init() {
        estados = cidadeService.getEstados();
    }

    public void listaCidades(AjaxBehaviorEvent event) {
        cidades = cidadeService.getCidades(estado);
    }

    public String novo() {
        funcionario = new Funcionario();
        return "/gestao/funcionarioForm.jsf";
    }

    public void salvar(ActionEvent evt) {
        System.out.println("ar");
        try {
            funcionarioService.salvar(funcionario);
            facesUtils.redirect("funcionarioLista.jsf");
            facesUtils.mensagem(":form:tabela", "Registro salvo com sucesso!", FacesMessage.SEVERITY_INFO);
            System.out.println("a");
        } catch (Exception ex) {
            ex.printStackTrace();
            facesUtils.mensagem("form:mgs", "Erro ao tentar salvar!", FacesMessage.SEVERITY_ERROR);
        }
    }

    public void consultar(ActionEvent evt) {
        funcionarios = funcionarioService.consulta(nomeConsulta);
    }

    public String editar() {
        estado = funcionario.getCidade().getEstado();
        listaCidades(null);
        return "funcionarioForm.jsf";
    }

    public void excluir() {
        funcionarioService.excluir(funcionario);
        funcionarios = null;
    }

    public List<Cidade> getCidades() {
        return cidades;
    }

    public void setCidades(List<Cidade> cidades) {
        this.cidades = cidades;
    }

    public Estado getEstado() {
        return estado;
    }

    public void setEstado(Estado estado) {
        this.estado = estado;
    }

    public List<Estado> getEstados() {
        return estados;
    }

    public void setEstados(List<Estado> estados) {
        this.estados = estados;
    }

    public Funcionario getFuncionario() {
        return funcionario;
    }

    public void setFuncionario(Funcionario funcionario) {
        this.funcionario = funcionario;
    }

    public List<Funcionario> getFuncionarios() {
        return funcionarios;
    }

    public void setFuncionarios(List<Funcionario> funcionarios) {
        this.funcionarios = funcionarios;
    }

    public String getNomeConsulta() {
        return nomeConsulta;
    }

    public void setNomeConsulta(String nomeConsulta) {
        this.nomeConsulta = nomeConsulta;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }
}
